草庐IT

Java HotSpot 枚举开销

全部标签

c++ - 探查器输出中线程并发开销时间的含义是什么?

如果有人对IntelVTuneAmplifier有很好的体验,我将不胜感激。最近我收到了其他使用英特尔VTuneAmplifier来对付我的程序的人的性能分析报告。它表明,线程并发区域中存在高开销时间。开销时间是什么意思?他们不知道(问我),我无法访问英特尔VTune放大器。我的想法很模糊。这个程序有很多线程sleep调用,因为pthreadcondition在目标平台上不稳定(或者我做的不好)所以我改变了很多例程来在循环中做工作,如下所示:while(true){mutex.lock();if(eventchanged){mutex.unlock();//dosomethingbre

c++ - 枚举类的 GoogleTest 测试错误打印

我正在使用GoogleTest1.7.0版来测试我的C++应用程序。我有一个枚举定义如下namespaceMyNamespace{enumclassMyEnum{MyEnumValue,MyEnumValue2}}GoogleTest错误地打印它的值,导致测试失败时出现此错误消息:Valueof:MyClass.MyMethodThatReturnsEnum()Actual:4-byteobjectExpected:MyEnum::MyEnumValueWhichis:4-byteobject删除class关键字会生成带有枚举实际值的正确错误消息。这是GoogleTest的已知行为/错

c++ - 使用最新的 C++ 以类型安全的方式从枚举中随机选择一个元素

有没有办法以类型安全的方式从枚举中随机选择一个元素?我能找到的最好的方法是引入一个终止符值作为枚举的最后一个元素,这样你就知道有多少个值,然后在你转换的适当范围内生成一个随机整数到枚举。但是终止符值不代表任何东西,所以你有一个无效的枚举值,这不是类型安全的。在最新的C++标准中有更好的方法吗? 最佳答案 这似乎是std::map的一个很好的用例std::mapnicer_enum{{"Do",3},{"Re",6},{"Mi",9}};std::coutsecond 关于c++-使用最新

c++ - 为什么允许使用任意值初始化枚举类临时值?

我在CppCon2014的一次演讲中遇到了如下代码,这让我很困惑。观众没有评论就接受了,所以我认为这是合法的:enumclassFoo{Bar};Fooconstv1=Foo(5);问题是:为什么要编译?我希望编译失败并提示我们不能将int转换为Foo。下面稍作修改的行因预期错误而失败:Fooconstv1(5); 最佳答案 作用域枚举类型有一个隐式底层类型int,假设没有指定其他底层类型。可以表示int类型的所有可能值。7.2p5:[...]Forascopedenumerationtype,theunderlyingtypeis

c++ - C++ 中字符串类型的枚举类

-背景信息:C++11中有一个类,称为枚举类,您可以在其中存储变量。但是,我只看到类的类型是char:enumclass:char{v1='x',v2='y'};-问题:有什么方法可以表达这个字符串类型的枚举类?例如,enumclass:string{v1="x",v2="y"};-我的想法:我尝试使用它,但出现错误,我不确定我是否做对了。我想使用字符串的原因是它们能够同时保存多个字符,所以这对我的代码更有用。 最佳答案 在C++11或C++14中无法做到这一点。但是,您应该考虑使用一些enumclass,然后编写一些显式函数或运算

c++ - C++ 中容器内过度对齐的结构和枚举之间的差异

在C++中,至少在GCC和Clang上,嵌入在容器中的过度对齐类型(std::vector)似乎根据类型是过度对齐的结构还是过度对齐的枚举而被区别对待.对于结构版本,每个元素都对齐,而对于枚举版本,只有整个缓冲区具有指定的对齐方式。标准是否指定了此行为?如果是这样,哪一部分提到了它?还是实现定义的,不应依赖?考虑以下几点:#include#include#includestructalignas(16)byte_struct{std::uint8_tvalue;};enumalignas(16)byte_enum:std::uint8_t{};intmain(){{//withstru

c++ - 如何在 C++ 中进行从枚举到类型的转换(并在模板中使用)?

这在C#中是可能的(参见Howtoconvertenumtotype),但我想知道我应该如何在C++11中实现它?可能的代码框架(也显示了我的预期用途)是://classify.h(partofpublicAPI)//definitionsofclassesA,B,Ccannotbeexposed,onlyalistofnames//(somenamesmightevenrefertothesametypeofobject)enumEAllowedTypes{eA,eB,eC};classEntity;boolclassifyEntityAs(constEntity&ent,EAllo

c++ - 使用枚举的一些很好的例子

我学会了enums当我学习C时,我不时地提醒自己,而且大部分时间都是通过重新阅读某些资料,我想到这是因为我从未在我的编程中使用它,我的编程兴趣专注于解决算法问题,所以我不确定我可以在哪里使用枚举。有人可以推荐一些使用枚举使事情变得容易的好例子吗?我会喜欢算法示例,但欢迎算法或非算法示例。 最佳答案 想象一下,您正在编写一个深度优先搜索程序,并且您想要用它们是树、后、前还是交叉来标记边。您可以创建一个具有四种可能性的枚举EDGE_TYPE,并使用它来标记您的边缘。 关于c++-使用枚举的一

c++ - 通过显式转换函数初始化枚举类类型的静态 constexpr 类成员

我在g++4.8.1和clang++3.4的行为之间存在差异。我有一个A类,它是文字类型的,它有一个explicitconstexpr转换函数来输入enumclassE.Gcc允许我在某些情况下使用转换函数从A类型的常量表达式初始化constexpr类型的E变量,但是不是当变量是静态类成员时(下面的e2)Clang拒绝所有上下文中的初始化(e1、e2和e3)。根据[over.match.conv]p1,在这里可以使用显式转换函数enumclassE{e};structA{explicitconstexproperatorconstE()constnoexcept{returnE::e;

C++17:还在使用枚举作为常量吗?

这个问题在这里已经有了答案:Replacingconstants:whentousestaticconstexprandinlineconstexpr?(2个答案)关闭3年前。我习惯于将enum用作常量——它们编写起来很快,可以放在.h文件中,并且工作正常。enum{BOX_LEFT=10,BOX_TOP=50,BOX_WIDTH=100,BOX_HEIGHT=50};enum{REASONS_I_LIKE_ENUM_AS_CONSTANTS=3};这不再是一个好主意吗?我看不错reasons更喜欢枚举类(传统枚举隐式转换为int;传统枚举将它们的枚举器导出到周围的范围),但在这种情况